package ru.compft.web.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import ru.compft.common.services.CacheService;
import ru.compft.web.WebConst;
import ru.compft.web.utils.FacesUtils;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * User: VVasiliev
 * Date: 14.06.12
 * Time: 13:43
 * Контроллер для управления доступными ролями системы
 */
@ManagedBean(name = WebConst.CACHE_CONTROLLER)
@SessionScoped
public class CachesController implements Serializable {
    private static final long serialVersionUID = -8618900123453327315L;

    private static final Logger logger = LoggerFactory.getLogger(CachesController.class);

    private Map<String, Boolean> selectedCacheNames = new HashMap<String, Boolean>();

    public Map<String, Boolean> getSelectedCacheNames() {
        return selectedCacheNames;
    }

    /**
     * Очищаем выбранные кеши
     */
    public void clearSomeCaches() {
        if (logger.isDebugEnabled()) {
            logger.debug("Clear caches table...");
        }

        System.out.println("CLEAR CACHE ACTION = ");

        // получаем сервис работы с кешем
        final CacheService cacheService = (CacheService) FacesUtils.getSpringBean(WebConst.CACHE_SERVICE);

        if (!CollectionUtils.isEmpty(selectedCacheNames)) {

            final List<String> cacheCodeListForClear = new ArrayList<String>();
            for (Map.Entry<String, Boolean> entry : selectedCacheNames.entrySet()) {
                if (entry.getValue()) {
                    cacheCodeListForClear.add(entry.getKey());
                }
            }
            if (!CollectionUtils.isEmpty(cacheCodeListForClear)) {
                cacheService.clearSomeCaches(cacheCodeListForClear);

                // todo сделать через файл messages
                FacesUtils.addInfoMessage(null, "Записи кешей " + cacheCodeListForClear + " очищены");
                if (logger.isDebugEnabled()) {
                    logger.debug("Records " + cacheCodeListForClear + " was cleared");
                }
            } else {
                // todo сделать через файл messages
                FacesUtils.addWarnMessage(null, "Записи не выбраны");
                if (logger.isInfoEnabled()) {
                    logger.debug("Records not selected");
                }
            }
        }
        // очистим все выбранные чек-боксы
        selectedCacheNames.clear();
    }

}
